package com.ch08.config;

import jakarta.servlet.MultipartConfigElement;
import jakarta.servlet.ServletRegistration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * @ClassName WebConfig
 * @Description web配置类
 * @Author Kx
 * @Date 2025/5/15 14:52
 * @Version 1.0
 */
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * @author: kx
     * @date: 2025/5/15 14:53
     * @return java.lang.Class<?>[]
     * @description: 配置主配置类
    */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    /**
     * @return java.lang.Class<?>[]
     * @author: kx
     * @date: 2025/5/15 14:53
     * @description: 配置启动类
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /**
     * @return java.lang.String[]
     * @author: kx
     * @date: 2025/5/15 14:53
     * @description: 配置映射路径
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * @author: kx
     * @date: 2025/5/15 14:54
     * @param registration : 文件上传对象
     * @description: 文件上传配置
    */
    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        /**
         * 参数一: 文件上传临时路径
         * 参数二: 单个文件最大大小
         * 参数三: 总上传文件最大大小
         * 参数四: 文件上传缓存大小
        */
        // 创建上传配置对象
        MultipartConfigElement multipartConfigElement = new MultipartConfigElement(
                "", // 临时文件存储路径
                20971520, // 单个文件的最大大小(20MB)
                2097152000, // 总上传文件的最大大小(20GB)
                2097152 // 文件上传缓存大小(2MB)
        );
        // 注册上传配置
        registration.setMultipartConfig(multipartConfigElement);
        // 让DispatcherServlet启动Web容器时初始化
        registration.setLoadOnStartup(0);
    }
}
